﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace AppGestionRequerimientos
{
    public partial class RegistrarRequerimientos : System.Web.UI.Page
    {
        AccesosService.GRUsuario usuario;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuario = (AppGestionRequerimientos.AccesosService.GRUsuario)Session["Usuario"];
            if(!Page.IsPostBack){
                inicializar();
                MaterialesService.ServiceMaterialesClient proxy = new MaterialesService.ServiceMaterialesClient();
                List<MaterialesService.GRCategoria> ListCategorias = new List<MaterialesService.GRCategoria>();            
                ListCategorias = proxy.ListarCategorias().ToList();
                cboCategoria.Items.Clear();
                cboCategoria.Items.Add("---Seleccione Categoria---");
                cboCategoria.DataSource = ListCategorias;
                cboCategoria.DataBind();
                proxy = null;
            }
        }

        private void inicializar() {                        
            DataTable dt = new DataTable();            
            dt.Columns.Add(new DataColumn("item", typeof(int)));
            dt.Columns.Add(new DataColumn("codigo", typeof(string)));
            dt.Columns.Add(new DataColumn("descripcion", typeof(string)));
            dt.Columns.Add(new DataColumn("uniMedida", typeof(string)));
            dt.Columns.Add(new DataColumn("cantidad", typeof(double)));            
            ViewState["listaMateriales"] = dt;
            listarMateriales.DataSource = dt;
            listarMateriales.DataBind();
            lblFechaReq.Text = DateTime.Now.ToShortDateString();
            lblHoraReq.Text = DateTime.Now.ToShortTimeString();
        }

        protected void cboCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            MaterialesService.ServiceMaterialesClient proxy = new MaterialesService.ServiceMaterialesClient();
            List<MaterialesService.GRSubCategoria> ListSubCategorias = new List<MaterialesService.GRSubCategoria>();
            ListSubCategorias = proxy.Listar_SubCategoria_X_Categoria(Convert.ToInt32(cboCategoria.SelectedValue.ToString())).ToList();
            cboSubCategoria.Items.Clear();
            cboSubCategoria.Items.Add("---Seleccione Subcategoria---");
            cboSubCategoria.DataSource = ListSubCategorias;
            cboSubCategoria.DataBind();
            proxy = null;
        }

        protected void cboSubCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            MaterialesService.ServiceMaterialesClient proxy = new MaterialesService.ServiceMaterialesClient();
            List<MaterialesService.GRMaterial> ListMateriales = null;
            ListMateriales = proxy.Listar_Materiales_X_SubCategoria(Convert.ToInt32(cboSubCategoria.SelectedValue.ToString())).ToList();
            cboMaterial.Items.Clear();
            cboMaterial.Items.Add("---Seleccione Material---");
            cboMaterial.DataSource = ListMateriales;
            cboMaterial.DataBind();            
            proxy = null;
        }

        protected void cboMaterial_SelectedIndexChanged(object sender, EventArgs e)
        {
            MaterialesService.ServiceMaterialesClient proxy = new MaterialesService.ServiceMaterialesClient();
            MaterialesService.GRMaterial material = null;
            material = proxy.ObtenerDatosMateriales(Convert.ToInt32(cboMaterial.SelectedValue.ToString()));
            lblUniMedidaCant.Text = proxy.ObtenerUnidadMedida(material.iCodUni).vNomUni.ToString();
            lblStock.Text = material.nCanMat.ToString("0,0.00") + " " + lblUniMedidaCant.Text.Trim();
            nomMaterial.Value = material.vNomMat;
            proxy = null;
        }
        
        protected void listarMaterial_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            if (ViewState["listaMateriales"] != null)
            {
                DataTable dt = (DataTable)ViewState["listaMateriales"];                
                int rowIndex = Convert.ToInt32(e.RowIndex);
                if (dt.Rows.Count > 0)
                {
                    dt.Rows.Remove(dt.Rows[rowIndex]);                    
                    ViewState["CurrentTable"] = dt;
                    listarMateriales.DataSource = dt;
                    listarMateriales.DataBind();

                    for (int i = 0; i < listarMateriales.Rows.Count; i++)
                    {
                        listarMateriales.Rows[i].Cells[0].Text = (i + 1).ToString();
                    }                    
                }
            }
        }

        protected void btnAgregarR_Click(object sender, EventArgs e)
        {            
            if (ViewState["listaMateriales"] != null)
            {
                DataTable dtCurrentTable = (DataTable)ViewState["listaMateriales"];
                DataRow drCurrentRow = null;
                
                drCurrentRow = dtCurrentTable.NewRow();
                drCurrentRow["item"] = dtCurrentTable.Rows.Count + 1; 
                drCurrentRow["codigo"] = cboMaterial.SelectedValue.ToString();
                drCurrentRow["descripcion"] = nomMaterial.Value;
                drCurrentRow["uniMedida"] = lblUniMedidaCant.Text;
                drCurrentRow["cantidad"] = Convert.ToDouble(txtCantidad.Text).ToString("0,0.00");                
                dtCurrentTable.Rows.Add(drCurrentRow);
                ViewState["listaMateriales"] = dtCurrentTable;
                                
                listarMateriales.DataSource = dtCurrentTable;
                listarMateriales.DataBind();
                for (int i = 0; i < listarMateriales.Rows.Count; i++)
                {
                    listarMateriales.Rows[i].Cells[0].Text = (i + 1).ToString();
                }  

                txtCantidad.Text = "";
                lblUniMedidaCant.Text = "";
            }                     
        }

        protected void btnLimpiarR_Click(object sender, EventArgs e)
        {
            txtCantidad.Text = "";
            lblUniMedidaCant.Text = "";
        }

        protected void btnGuardar_Click(object sender, EventArgs e) {
            try {
                RequerimientosService.ServiceRequerimientoClient proxy = new RequerimientosService.ServiceRequerimientoClient();
                RequerimientosService.GRMaeRequerimiento cabecera = new RequerimientosService.GRMaeRequerimiento();
                List<RequerimientosService.GRDetRequerimiento> detalle = new List<RequerimientosService.GRDetRequerimiento>();
                RequerimientosService.GREstadoReq estado = new RequerimientosService.GREstadoReq();
                estado = proxy.ObtenerDatosEstado(2);

                cabecera.iCodUsuReg = usuario.iCodUsu;
                cabecera.dtFecReq = DateTime.Now;
                cabecera.vHorReq = DateTime.Now.ToShortTimeString();
                cabecera.vObsReq = txtObservaciones.Text.Trim();
                cabecera.iCodEstReq = estado.iCodEstReq;
                cabecera.iCodUsuA = usuario.iCodUsu;
                cabecera.vNomTer = Request.ServerVariables["REMOTE_ADDR"].ToString();
                cabecera.dtFecAct = DateTime.Now;

                DataTable dtCurrentTable = (DataTable)ViewState["listaMateriales"];
                foreach (DataRow drCurrentRow in dtCurrentTable.Rows)
                {
                    RequerimientosService.GRDetRequerimiento item = new RequerimientosService.GRDetRequerimiento();
                    item.iCodMat = Convert.ToInt32(drCurrentRow["codigo"].ToString());
                    item.nCanReq = Convert.ToDouble(drCurrentRow["cantidad"].ToString());
                    item.iCodUsu = usuario.iCodUsu;
                    item.vNomTer = Request.ServerVariables["REMOTE_ADDR"].ToString();
                    item.dtFecAct = DateTime.Now;
                    detalle.Add(item);
                }

                cabecera.iNumReq = proxy.RegistrarRequerimiento(cabecera, detalle.ToArray());

                if (cabecera.iNumReq > 0)
                    hrRespuesta.Value = "1";
                else
                    hrRespuesta.Value = "0";
            }catch {
                hrRespuesta.Value = "0";
            }            
            
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
        }

    }  
}